home *** CD-ROM | disk | FTP | other *** search
- {.PO 10}
-
- {$N+}
- {$M 8192,0,0}
-
- PROGRAM TestDMLUnit;
-
- USES
- CRT, { Turbo UNITs }
- GEN, KBD, NUM, STRG; { DML individual UNITs }
- { DML; } { DML 'LIB' of individual UNITs }
-
- VAR
- ProgName : STRING;
- Ctr : INTEGER;
- Start : REAL;
- Stop : REAL;
- Password : STRING;
- TestFile : FILE OF CHAR;
- TestBuf : CHAR;
- StrNum : StrNumType; { StrNonNumeric,StrZero,StrNonZero }
- CharArr : ARRAY[1..255] OF CHAR;
- JulSec : REAL;
- DateTime : T_DateTime;
-
- PROCEDURE Continue;
- BEGIN
- WRITELN(^J^M,'Press any key to continue, or * to exit ...');
- IF READKEY = '*' THEN HALT;
- CLRSCR;
- END;
-
- {$F+}PROCEDURE Silly;{$F-}
- BEGIN
- WRITELN('In a simple procedure invoked by passing its address as a parameter');
- END;
-
- {$F+}PROCEDURE VerySilly(ProcAddrP : POINTER; I1 : INTEGER; VAR S1 : STRING; VAR I2 : INTEGER);{$F-}
- BEGIN
- WRITELN('In a complex procedure invoked by passing its address as a parameter');
- WRITELN('Input Params ',I1,' ',S1,' ',I2);
- I1 := I1 + 5; { won't change globally }
- S1 := S1 + '!@';
- I2 := I1;
- END;
-
- PROCEDURE GenStart;
- BEGIN
- CLRSCR;
- WRITELN(CJS('GENERAL PURPOSE ROUTINES',80));
- END;
-
- PROCEDURE Gen1;
- BEGIN
- WRITELN(' 1) System Programming Extensions',^J^M);
- WRITELN('>> CALLPROCEDURE <<');
- CallProcedure(@Silly);
- Ctr := 1000;
- Password := 'PASSWORD';
- WRITELN('>> CALLPROCEDUREX <<');
- CallProcedureX(@VerySilly,12,Password,Ctr);
- WRITELN('Output Params ',Password,' ',Ctr);
- WRITELN('>> LONGADDR <<');
- WRITELN('The full 32 bit hex address of $1234:$5678 is ',L2S(LongAddr($1234,$5678),'HHHHH'));
- WRITELN('>> SAME <<');
- IF Same(PassWord,PassWord,SIZEOF(PassWord))
- THEN WRITELN(' This better work!')
- ELSE WRITELN(' BUGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG!');
- Continue;
- END;
-
- PROCEDURE Gen2;
- BEGIN
- ProgName := WhoAmI;
- ProgName := COPY(ProgName,1,LENGTH(Progname)-3) + 'PAS';
- WRITELN(' 2) File I/O and Protection',^J^M);
- WRITELN('Check read only attributes');
- WRITELN('>> READONLYGETATTR <<');
- IF NOT ReadOnlyGetAttr(ProgName) THEN BEGIN
- WRITELN('Setting this program to read only access');
- WRITELN('>> READONLYSETATTR <<');
- IF ReadOnlySetAttr(ProgName,On) <> 0 THEN Abend(240,NIL);
- END;
- IF EXIST(ProgName)
- THEN Abend(241,NIL)
- ELSE WRITELN('This program is now set read only');
- WRITELN('>> READONLYEXIST <<');
- IF ReadOnlyExist(ProgName)
- THEN WRITELN('This read only program exists and has a time stamp of ',GetFileDateAndTimeLongInt(ProgName))
- ELSE Abend(242,NIL);
- WRITELN('About to read the read only program...');
- DELAY(2000);
- ASSIGN(TestFile,ProgName);
- { RESET(TestFile); executing this statement would get file access denied }
- WRITELN('>> FILEOPEN <<');
- IF FileOpen(TestFile,SIZEOF(TestBuf),Read_Only) <> 0 THEN Abend(243,NIL);
- CLOSE(TestFile);
- WRITELN('>> FILEASSIGNANDOPEN <<');
- IF NOT FileAssignAndOpen(ProgName,TestFile,SIZEOF(TestBuf),Read_Only) THEN Abend(244,NIL);
- WHILE NOT EOF(TestFile) DO BEGIN
- READ(TestFile,TestBuf);
- WRITE(TestBuf);
- END;
- CLOSE(TestFile);
- WRITELN('Done reading');
- IF ReadOnlySetAttr(ProgName,Off) = 0
- THEN WRITELN('This program is set back to read/write access')
- ELSE Abend(245,NIL);
- Continue;
- END;
-
- PROCEDURE Gen3;
- BEGIN
- WRITELN(' 3) Text Encryption',^J^M);
- WRITELN('>> ENCRYPT <<');
- Password := EnCrypt('PASSWORD');
- WRITELN('>> DECRYPT <<');
- WRITELN('The encryped password is ',Password,^J^M,
- 'the decrypted password is ',DeCrypt(Password));
- Continue;
- END;
-
- PROCEDURE Gen4;
- BEGIN
- WRITELN(' 4) General Purpose Video',^J^M);
- WRITELN('Listen to the annoying high pitch beep');
- WRITELN('>> GENBEEP <<');
- GenBeep(2000,1000);
- WRITELN('>> COLORMONITORINSTALLED <<');
- IF ColorMonitorInstalled
- THEN WRITELN('Color Monitor Installed')
- ELSE WRITELN('Monochrome Monitor Installed');
- WRITELN('>> CURSOR <<');
- Cursor(FALSE);
- WRITELN('The cursor on the next line is invisible');
- DELAY(2000);
- Cursor(TRUE);
- WRITELN('The cursor on the next line is back to normal');
- DELAY(2000);
- WRITELN('>> CURSORINSERTSIZE <<');
- CursorInsertSize;
- WRITELN('The cursor on the next line is fat');
- DELAY(2000);
- WRITELN('>> CURSOROVERWRITESIZE <<');
- CursorOverwriteSize;
- WRITELN('The cursor on the next line is back to normal');
- DELAY(2000);
- WRITELN('>> SCRBACKCURSORCOLOR <<');
- WRITELN('The foreground color of the cursor is ',ScrForeCursorColor);
- WRITELN('>> SCRFORECURSORCOLOR <<');
- WRITELN('The background color of the cursor is ',ScrBackCursorColor);
- Continue;
- END;
-
- PROCEDURE Gen5;
- BEGIN
- WRITELN(' 5) General Purpose Video',^J^M);
- WRITELN('Watch the ',^],' character and hit any key to continue...');
- WRITELN('>> PAUSE <<');
- Pause;
- WRITELN('>> SCRERRMSG <<');
- ScrErrMsg('This is a test error Message');
- WRITELN('>> SCRSTATMSG <<');
- ScrStatMsg('This is a test status Message');
- DELAY(2000);
- WRITELN('>> SCRYN <<');
- IF ScrYN('go to lunch')
- THEN WRITELN('consume mass quantities')
- ELSE WRITELN('starve');
- WRITELN('>> SCRYOUARESURE <<');
- IF ScrYouAreSure('cure world hunger')
- THEN WRITELN('collect your Nobel Prize')
- ELSE WRITELN('collect unemployment');
- DELAY(2000);
- WRITELN('>> WAIT <<');
- WRITELN('Watch the WAIT message be displayed and then cleared');
- Wait(TRUE);
- DELAY(1000);
- Wait(FALSE);
- Continue;
- END;
-
- PROCEDURE Gen6;
- BEGIN
- WRITELN(' 6) Disk and Memory Sizes',^J^M);
- WRITELN('>> BYTESONDISKFREE <<');
- WRITELN('There are ',L2S(BytesOnDiskFree(' '),'###,###,###'), ' bytes of disk available on default drive');
- WRITELN('>> FREEDOSMEM <<');
- WRITELN('There are ',L2S(FreeDOSMem,'###,###'), ' bytes of memory available');
- WRITELN('>> SIZEOFMEM <<');
- WRITELN('There are ',L2S(SizeOfMem,'###,###'), ' bytes of memory installed');
- WRITELN('>> STACKAVAIL <<');
- WRITELN('There are ',L2S(StackAvail,'##,###'), ' bytes of stack available');
- Continue;
- END;
-
- PROCEDURE Gen7;
- BEGIN
- WRITELN(' 7) Instruction Timing',^J^M);
- WRITELN('>> TIMEELAPSED <<');
- WRITELN('Seconds elapsed since midnight with 6 byte reals ',R2S(TimeElapsed,'###,###.@@'));
- WRITELN('Seconds elapsed since midnight with 8 byte reals ',D2S(TimeElapsed,'###,###.@@'));
- Start := TimeElapsed;
- FOR Ctr := 1 TO MAXINT DO;
- Stop := TimeElapsed;
- WRITELN('>> TIMETOTAL <<');
- WRITE('Seconds elapsed in null loop ',TimeTotal(Start,Stop));
- Continue;
- END;
-
- PROCEDURE Gen8;
- BEGIN
- ProgName := WhoAmI;
- ProgName := COPY(ProgName,1,LENGTH(Progname)-3) + 'PAS';
- WRITELN(' 8) General purpose file',^J^M);
- WRITELN('>> EXIST <<');
- WRITELN('>> LINESINFILE <<');
- WRITELN('>> GETFILEDATEANDTIMESTRING <<');
- WRITELN('>> GETFILEDATEANDTIMELONGINT <<');
- IF Exist(ProgName) THEN BEGIN
- WRITELN('This program exists & has ',LinesInFile(ProgName),' lines of text',
- ^J^M,'and has a time stamp of ',GetFileDateAndTimeString(ProgName));
- WRITELN('And has a LongInt time stamp of ',GetFileDateAndTimeLongInt(ProgName));
- END
- ELSE WRITELN('This program doesn''t exist');
- Continue;
- END;
-
- PROCEDURE Gen9;
- BEGIN
- WRITELN(' 9) Math',^J^M);
- WRITELN('>> POWER <<');
- WRITELN('Two to the third power is ',Power(2,3):9:4);
- WRITELN('2.01 to the 3.02 power is ',Power(2.01,3.02):9:4);
- WRITELN('>> LOG <<');
- WRITELN('The base 10 log of 100 is ',Log(100):9:4);
- Continue;
- END;
-
- PROCEDURE Gen10;
- BEGIN
- WRITELN('10) DOS and Environment',^J^M);
- WRITELN('>> DOSVERSIONR <<');
- WRITELN('This is DOS version ',DOSVersionR:5:2);
- WRITELN('>> WHOAMI <<');
- WRITELN('Currently executing program is ',WhoAmI);
- WRITELN('>> GETENVSTRING <<');
- WRITELN('COMSPEC is: ',GetEnvString(' COMSPEC = '));
- Continue;
- END;
-
- PROCEDURE Gen11;
- BEGIN
- WRITELN('11) Version Control',^J^M);
- WRITELN('>> GETVERSION <<');
- WRITELN('>> GETVERSIONS <<');
- ScrStatMsg(GetDMLVersions);
- Continue;
- END;
-
- PROCEDURE StrgStart;
- BEGIN
- CLRSCR;
- WRITELN(CJS('STRING HANDLING ROUTINES',80));
- END;
-
- PROCEDURE Strg1;
- BEGIN
- WRITELN(' 1) General Purpose String',^J^M);
- WRITELN('>> RJS <<');
- WRITELN('>> LJS <<');
- WRITELN('>> CJS <<');
- WRITELN(LJS('Left',25),CJS('Center',25),RJS('Right',25));
- Password := 'A B c d E';
- WRITELN('>> STRIP <<');
- WRITELN(Password,' striped of all blanks and tabs ',Strip(Password,S_AllSpaces));
- Password := 'A B c d E';
- WRITELN(Password,' upper cased ',StrCase(Password,S_ToUpper));
- Password := 'Field1,Field2,Field3';
- WRITELN('>> STRFIELD <<');
- FOR Ctr := 1 TO 4 DO WRITELN('Field Number ',Ctr,' ',StrField(Password,',',Ctr),' ');
- Password := StrFill('*',60);
- WRITELN('>> STRFILL <<');
- WRITELN('I see stars ',Password);
- WRITELN('>> STRPAD <<');
- WRITELN('Blank pad {',COPY(StrPad('ABCDEFGHIJKLMNOPQRSTUVWXYZ'),1,60),'}');
- WRITELN('>> STRSHIFTLEFT <<');
- WRITELN('Remove a character from string ',StrShiftLeft('ABCDEFGHIJKLMNOPQRSTUVWXYZ',13));
- WRITELN('>> STRSHIFTRIGHT <<');
- WRITELN('Add a character to string ',StrShiftRight('ABCDEFGHIJKLNOPQRSTUVWXYZ',13,'m'));
- Continue;
- END;
-
- PROCEDURE Strg2;
- BEGIN
- WRITELN(' 2) String Conversion',^J^M);
- WRITELN('>> S2C <<');
- WRITELN('>> C2S <<');
- S2C('Probably use to create text import files',CharArr,255);
- WRITELN(C2S(CharArr,255));
- WRITELN('>> S2Z <<');
- WRITELN('>> Z2S <<');
- S2Z('Probably use to create c language or DOS strings',CharArr);
- WRITELN(Z2S(CharArr));
- Continue;
- END;
-
- PROCEDURE NumStart;
- BEGIN
- CLRSCR;
- WRITELN(CJS('NUMERIC ROUTINES',80));
- END;
-
- PROCEDURE Num1;
- BEGIN
- WRITELN(' 1) General Numeric Formatting and Conversion',^J^M);
- WRITELN('>> B2S <<');
- WRITELN(CJS('It''s '+B2S(2+2=4)+' that 2 + 2 = 4',30),'so don''t make a ',2+2=3,' step');
- WRITELN('>> W2S <<');
- WRITELN('Word to String test ',W2S(MAXINT*2,'-##,##@'));
- WRITELN('>> I2S <<');
- WRITELN('Integer to String test ',I2S(-MAXINT,'-##,##@'));
- WRITELN('>> L2S <<');
- WRITELN('Long Integer to String tests ',L2S(MAXINT*100,'###,###,##@'),' '
- ,L2S(-1116665555,'(###) ###-####'));
- WRITELN('>> R2S <<');
- WRITELN('Seconds elapsed since midnight with 6 byte reals ',R2S(TimeElapsed,'###,###.@@'),' '
- ,R2S(-9996665555.0,'(###) ###-####'));
- WRITELN('>> D2S <<');
- WRITELN('Seconds elapsed since midnight with 8 byte reals ',D2S(TimeElapsed,'###,###.@@'));
- WRITELN('>> S2R <<');
- WRITELN('String to real test ',S2R('123456789.987654321'):20:10);
- WRITELN('>> S2D <<');
- WRITELN('String to double test ',S2D('123456789.987654321'):20:10);
- Continue;
- WRITELN('>> StrNumTest <<');
- WRITELN('Test string for numerics: enter test strings, terminate with * ');
- REPEAT
- READLN(Password);
- StrNum := StrNumTest(Password);
- CASE StrNum OF
- StrNonNumeric : WRITELN('String has no numeric characters');
- StrZero : WRITELN('String has numeric value of zero');
- StrNonZero : WRITELN('String has numeric value of non zero');
- END;
- UNTIL Password = '*';
- WRITELN('>> S2L <<');
- WRITELN('String to Long Integer test ',S2L('123456789'));
- WRITELN('>> S2I <<');
- WRITELN('String to Integer test ',S2I('-12345'));
- WRITELN('>> S2W <<');
- WRITELN('String to Word ',S2W('65001'));
- Continue;
- END;
-
- PROCEDURE Num2;
- BEGIN
- WRITELN(' 2) Date and Time Formatting and Conversion',^J^M);
- WRITELN('>> NUMTH <<');
- WRITELN('Sunday is the ',NumTh(1),' day of the week');
- WRITELN('>> GETDOSDATEANDTIME <<');
- WRITELN('>> DATE2S <<');
- GetDOSDateAndTime(JulSec,DateTime);
- WRITELN('Today is: ',Date2S(DateTime,' WWW MM/DD/YY hh:mm:ss pm'));
- WRITELN('Julian seconds since 12/31/1840 ',JulSec:15:1);
- JulSec := JulSec + 60*60*24;
- WRITELN('>> R2DATE <<');
- R2Date(JulSec,DateTime);
- WRITELN('Tomorrow is: ',Date2S(DateTime,' WWW MM/DD/YY hh:mm:ss pm'));
- INC(DateTime.Year);
- WRITELN('>> DATE2R <<');
- Date2R(JulSec,DateTime);
- R2Date(JulSec,DateTime);
- WRITELN('Next Year is: ',Date2S(DateTime,' WWW MM/DD/YY hh:mm:ss pm'));
- WRITELN('>> SETDOSDATEANDTIME <<');
- SetDOSDateAndTime(DateTime);
- DEC(DateTime.Year);
- DEC(DateTime.Day);
- SetDOSDateAndTime(DateTime);
- Continue;
- END;
-
- PROCEDURE KbdStart;
- BEGIN
- CLRSCR;
- WRITELN(CJS('KEYBOARD ROUTINES',80));
- END;
-
- PROCEDURE Kbd1;
- BEGIN
- WRITELN(' 1) General Purpose Keyboard',^J^M);
- WRITELN('>> KBDGETSTATUS <<');
- WRITELN(W2S(KbdGetStatus,'HHHH'));
- WRITELN('>> KBDSETINSMODE <<');
- KbdSetInsMode(ON);
- WRITELN('>> KBDSETCAPSLOCK <<');
- KbdSetCapsLock(ON);
- WRITELN('>> KBDSETNUMLOCK <<');
- KbdSetNumLock(ON);
- WRITELN('>> KBDSETSCROLLLOCK <<');
- KbdSetScrollLock(ON);
- WRITELN(W2S(KbdGetStatus,'HHHH'));
- WRITELN('>> KBDINSMODESTATUS <<');
- WRITELN(KbdInsModeStatus);
- WRITELN('>> KBDCAPSLOCKSTATUS <<');
- WRITELN(KbdCapsLockStatus);
- WRITELN('>> KBDNUMLOCKSTATUS <<');
- WRITELN(KbdNumLockStatus);
- WRITELN('>> KBDSCROLLLOCKSTATUS <<');
- WRITELN(KbdScrollLockStatus);
- WRITELN('>> KBDCLEAR <<');
- KbdClear;
- WRITELN('>> KBDIKEYWAITING <<');
- WRITELN('Please press any key');
- REPEAT
- UNTIL KbdKeyWaiting;
- WRITELN('>> KBDNUMVALUESWAITING <<');
- WRITELN('Number of keystrokes entered ',KbdNumValuesWaiting);
- WRITELN('>> KBDINPUTVALUE <<');
- WRITELN(KbdInputValue);
- KbdClear;
- Continue;
- END;
-
- PROCEDURE Die;
- BEGIN
- WRITELN('About to do a user defined abend on purpose');
- DELAY(2000);
- WRITELN('>> ABEND <<');
- Abend(250,NIL);
- END;
-
- BEGIN
- GenStart; { GENERAL PURPOSE ROUTINES }
- Gen1; { System Programming Extensions }
- Gen2; { File I/O and protection }
- Gen3; { Text Encryption }
- Gen4; { General Purpose Video }
- Gen5; { Video Messages }
- Gen6; { Disk and Memory Sizes }
- Gen7; { Instruction Timing }
- Gen8; { General Purpose File }
- Gen9; { Math }
- Gen10; { DOS and Environment }
- Gen11; { Version Control }
- StrgStart; { STRING HANDLING ROUTINES }
- Strg1; { General Purpose String }
- Strg2; { String Conversion }
- NumStart; { NUMERIC ROUTINES }
- Num1; { General Formatting and Conversion }
- Num2; { Date and Time Formatting and Conversion }
- KbdStart; { KEYBOARD ROUTINES }
- Kbd1; { General Purpose Keyboard }
- Die; { System Programming Extensions }
- END.